﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using CeA.Reports.Atendimento.Web.WebControls;
using Qtech.Reports.Atendimento.Services;
using CeA.Reports.Atendimento.DataAccess.DTO;
using System.Collections.Generic;
using CeA.Reports.Atendimento.DataAccess.Criteria;

namespace CeA.Reports.Atendimento.Web.site {
    public partial class relatorioplanejamento : System.Web.UI.Page {
        protected void Page_Init(object sender, EventArgs e)                            {
            filtro.Pesquisar += new FiltroPlanejamento.FiltroPlanejamentoEventHandler(filtro_Pesquisar);
            btnExportarExcel.Click += new EventHandler(btnExportarExcel_Click);
        }


        protected void Page_Load(object sender, EventArgs e)                            {

        }


        protected void filtro_Pesquisar(object sender, FiltroPlanejamentoEventArgs e)   {
            carregarRelatorio(e);
            ViewState.Add("filtro", e);
            btnExportarExcel.Visible = true;//e.ExportaRelatorio;
            pnlImprimir.Visible = true;
        }


        protected void btnExportarExcel_Click(object sender, EventArgs e)               {
            //limpo a resposta do HTTP
            Response.Clear();
            //adiciono o cabeçalho que faz o .Net entender que se trata de um xls
            Response.AddHeader("content-disposition", "attachment;filename=planejamento_report.xls");
            //zero o charset
            Response.Charset = "";
            //desabilito o cache do browser
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            //Seto o content type para xls
            Response.ContentType = "application/vnd.xls";
            //Crio um String Writer
            System.IO.StringWriter sWr = new System.IO.StringWriter();
            //Transformo em HTML String Writer
            System.Web.UI.HtmlTextWriter hWr = new HtmlTextWriter(sWr);
            //Mando o datagrid (que deve ser criado antes de renderizar o HtmlTextWriter criado...
            carregarRelatorio(ViewState["filtro"] as FiltroPlanejamentoEventArgs); 
            resultTable.RenderControl(hWr);
            //mando escrever na tela. Com todos os cabeçalhos setados, é aberto para salvar o XML
            Response.Write(sWr.ToString());
            //Fecho a resposta.
            Response.End();
        }


        private void carregarRelatorio(FiltroPlanejamentoEventArgs e)                   {
            List<HoraDTO> horaRows = CadastroFacade.FindHora();

            TableRow tr = new TableRow();
            tr.Cells.Add(new TableHeaderCell() { Text = "dd/mm" });

            foreach (HoraDTO row in horaRows) {
                TableHeaderCell th = new TableHeaderCell();
                th.Text = row.HoraString;
                tr.Cells.Add(th);
            }

            tr.Cells[0].Text = "Período";
            tr.CssClass = "th";

            resultTable.Rows.Add(tr);

            List<PlanejamentoDTO> planRows = CadastroFacade.FindPlanejamento(new PlanejamentoCriteria() {
                Ano = Convert.ToInt32(e.Ano),
                Mes = Convert.ToInt32(e.Mes),
                LojaId = Convert.ToInt32(e.Loja)
            });


            string otherDia = null;
            int count = 0;

            tr = new TableRow();
            tr.Cells.Add(new TableCell() { Text = "dd/mm" });

            foreach (PlanejamentoDTO row in planRows) {
                string actualDia = row.Dia.Dia.ToString().PadLeft(2, '0') + "/" + row.Dia.Mes.ToString().PadLeft(2, '0');
                if (otherDia == null) otherDia = actualDia;

                if (actualDia != otherDia) {
                    if (count % 2 == 0)
                        tr.CssClass = "cor-1";
                    else
                        tr.CssClass = "cor-2";

                    tr.Cells[0].Text = otherDia;
                    tr.Cells[0].CssClass = "first-col";

                    resultTable.Rows.Add(tr);

                    otherDia = row.Dia.Dia.ToString().PadLeft(2, '0') + "/" + row.Dia.Mes.ToString().PadLeft(2, '0');

                    tr = new TableRow();
                    tr.Cells.Add(new TableCell() { Text = "dd/mm" });

                    count++;
                }

                TableCell td = new TableCell();
                td.Text = Convert.ToString(row.QtdeMesaPlanejada);

                tr.Cells.Add(td);

                otherDia = row.Dia.Dia.ToString().PadLeft(2, '0') + "/" + row.Dia.Mes.ToString().PadLeft(2, '0');
            }
        }
    }
}
